package com.ruoyi.business.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * 支付下单请求参数
 */
//@ApiModel
@Data
public class NewOrderReq implements Serializable {

    private static final long serialVersionUID = -8094524055661558186L;
    /**
     * 注册的商户uid
     */
    @NotNull(message = "商户唯一标识参数不能为空")
    @ApiModelProperty(value = "您的商户唯一标识，注册后在设置里获得。" ,required = true)
    private Long uid;

    /**
     * 签名。计算规则参考接口文档说明
     */
    @NotNull(message = "签名参数不能为空")
    @ApiModelProperty(value = "签名参数。把使用到的所有参数（sign本身和路径path参数除外）连token一起，按参数名字母升序排序。然后按key1=value1&key2=value2形式拼接在一起。最后md5-32位加密取字符串大写得到sign参数字符串。注意不要urlencode" ,required = true)
    private String sign;

    /**
     * 当前时间戳（单位毫秒）
     */
    @NotNull(message = "当前时间戳不能为空,10")
    @ApiModelProperty(value = "当前时间戳（单位毫秒）" ,required = true)
    private String timestamp;

    @NotNull(message = "订单金额参数不能为空")
    @ApiModelProperty(value = "订单金额。单位：元。精确小数点后2位。例：1021.16" ,required = true)
    @DecimalMax(value="100000.00",message="最大订单金额是100000")
    @DecimalMin(value="0.01",message="最小订单金额是0.01")
    private String money;

    @NotNull(message = "通道类型不能为空,固定值：alipay、wechat或unionpay")
    @ApiModelProperty(required = true ,value = "通道类型。固定值：alipay、wechat或unionpay")
    private String channelType;

    //@ApiModelProperty(value = "指定支付通道编码。不传该参数则平台会自动选择可用通道。")
    private String channel;

    @NotNull(message = "订单ID不能为空")
    @ApiModelProperty(required = true , value = "您的唯一订单ID，必须全局唯一。")
    private String outTradeNo;

    @NotNull(message = "异步通知回调url不能为空")
    @ApiModelProperty(required = true, value = "用户支付成功后，我们服务器会主动发送一个post消息到这个网址。由您自定义。不要urlencode。例：http://www.aaa.com/paysucc_notify")
    private String notifyUrl;

    @ApiModelProperty(required = true, value = "用户支付成功后，我们会让用户浏览器自动跳转到这个网址。由您自定义。不要urlencode。例：http://www.aaa.com/paysucc_return")
    private String returnUrl;

    @NotNull(message = "商品名称不能为空")
    @ApiModelProperty(value = "您的商品名称，可以用来统计商品销售情况。" )
    private String goodsName;

//    @ApiModelProperty(value = "我们会显示在您后台的订单列表中，方便您看到是哪个用户的付款，方便后台对账。强烈建议填写。可以填用户名，也可以填您数据库中的用户uid。例：xxx, xxx@aaa.com" )
    private String outUserId;

    //@ApiModelProperty(value = "商户给订单的附加信息用来实现灵活的业务逻辑，我们会在回调的时候原样返回。" )
    private String outBody;
    //下游订单号
    private String customOrderNo;

    public String getCustomOrderNo() {
        return customOrderNo;
    }

    public void setCustomOrderNo(String customOrderNo) {
        this.customOrderNo = customOrderNo;
    }

    /**
     * 收款号账户
     */
   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String channelAccount;

    /**
     * 收款号平台id
     */
   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private Long recipientId;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String recipientRealName;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private Long recipientUserId;

    /**
     * 是否平台收款号
     */
   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private int platformIs;


    /**
     * 账户信息json串。生成付款url和二维码
     */
   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String accountJson;


    /**
     * 收款码内容
     */
   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String receiptQrcode;


    /**
     * 店员账号
     */
   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String clerkAccount;


   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private Long cardId;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String alipayCardid;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String latitude;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String longitude;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String aliAuthCode;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String aliUserId;

   //@Transient
    @JsonIgnore
    //@ApiModelProperty(hidden = true)
    private String proxyIp;


}
